package com.gdawj.ejb;

import com.gdawj.exception.AdministrateurException;
import com.gdawj.javabeans.Administrateur;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

@Stateless
public class AdministrateurEJB implements AdministrateurEJBRemote, AdministrateurEJBLocal {
    
    // unite de persistance
    @PersistenceContext(unitName="webcolepu")
    private EntityManager em;

    // logger
    private final Logger logger=Logger.getLogger(this.getClass().getName());

    
    // recuperer un administrateur de la liste
    public Administrateur getAdministrateur(int idAdministrateur)
    {
       return em.find(Administrateur.class,(long)idAdministrateur);
    }

    // retourner la liste des administrateurs
    public List<Administrateur> getListeAdministrateurs()
    {
    	TypedQuery<Administrateur> query=em.createQuery("SELECT a FROM Administrateur a",Administrateur.class);
	return query.getResultList();
    }

    // creer un administrateur
    public Administrateur ajouter(Administrateur administrateur) {
	try {
	 em.persist(administrateur);
        }
        catch(Exception ex)
        {
            logger.log(Level.SEVERE,"Erreur dans la classe "+this.getClass().getName()+" lors de l'ajout d'un administrateur",ex);
            try {
                // declencher une exception
                throw new EJBException();
            } catch (Exception ex1) {
                logger.log(Level.SEVERE,"Erreur dans la classe "+this.getClass().getName()+" lors de l'ajout d'un administrateur",ex1);
            }
            
        }

        return administrateur;
    }

    
    // modifier un administrateur dans la liste
    public Administrateur modifier(Administrateur administrateur)
    {
        return em.merge(administrateur);
    }

    // supprimer un administrateur de la liste
    public void supprimer(int idAdministrateur)
    {
        Administrateur a=this.getAdministrateur(idAdministrateur);
        if(a!=null)
        {
            em.remove(em.merge(a));
	}
    }
 
}
